#ifndef LCOM_INPUT_H
#define LCOM_INPUT_H

#include "utypes.h"

/** @defgroup Input Input
 * @{
 *
 * Entrada de dados. Rato e teclado.
 */

/** Inicializa o rato e teclado
 */
void input_init (void);

/** Desactiva o rato e teclado
 */
void input_finish (void);

/** Assinatura das funções de processamento de entradas do teclado
 *
 * \param scan_code Scan code recebido do teclado
 * \param data Dados passados quando a função foi registada
 * \return true se a função usou o scan code, false caso contrário
 */
typedef Bool (* KeyboardFunc) (unsigned char scan_code, void *data);

/** Regista uma função de processamento do teclado
 *
 * \param callback Callback que processa scancodes
 * \param data Dados passados para a callback
 * \param top Se true a função é a primeira a ser chamada. Caso contrário é a última
 * \return Um valor usado para remover a função
 */
void *input_keyboard_register (KeyboardFunc callback, void *data, Bool top);

/** Remove uma função de processamento do teclado
 *
 * \param id O valor retornado por input_keyboard_register()
 */
void input_keyboard_unregister (void *id);

/** Lê input do teclado e chama as funções de processamento
 */
void input_keyboard_read (void);

/** @} */ 

#endif /** LCOM_INPUT_H **/

